package com.nulldev.util.web.nTube.pages.nmusic;

import com.nulldev.util.languages.json.uniapi.UniJsonValue;
import com.nulldev.util.manage.MarkedForRemoval;
import com.nulldev.util.web.HttpServer3.Response;
import com.nulldev.util.web.HttpServer3.pages.v3.HttpPage3;

@MarkedForRemoval(reason = "nMusic is no more.")
public class NMusicGetPage extends HttpPage3 {

	public NMusicGetPage() {
		super("/nmusic/get");
	}

	@SuppressWarnings("resource")
	@Override
	public Response onRequest(final Request request) {
		final UniJsonValue uv = UniJsonValue.object().add("reason", "nMusic is no longer available.").add("error", true).add("error_id",
				"ERROR_NMUSIC_UNAVAILABLE");
		return new Response(403, uv, uv).setCustomMime("application/json");
//		final Map<String, String> args = URLQueryParser.extract(request.url());
//		if (!args.containsKey("target"))
//			return new Response(403);
//		final UniJsonValue o = UniJsonValue.object();
//		if (!args.containsKey("target") && args.get("target") != null) {
//			o.add("error", "No target provied!");
//			o.add("error_id", "ERROR_TARGET_MISSING");
//			return new Response(200, o).setCustomMime("application/json");
//		}
//		if (!args.containsKey("url") && args.get("url") != null) {
//			o.add("error", "No url provied!");
//			o.add("error_id", "ERROR_URL_MISSING");
//			return new Response(200, o).setCustomMime("application/json");
//		}
//		final String target = args.get("target");
//		final String action = args.containsKey("action") ? args.get("action") : "";
//		if (target.equalsIgnoreCase("rdj")) {
//			try {
//				final String u = args.get("url");
//				final String sid = u.substring(u.indexOf("dj/") + 3, u.length());
//				final RaveDJ rdj = new RaveDJ(sid);
//				rdj.init();
//				o.add("title", rdj.getTitle());
//				o.add("artist", rdj.getArtist());
//				o.add("thumbnail", rdj.getThumbnail());
//				o.add("video", rdj.getMediaURL());
//				o.add("audio", rdj.getAudioURL());
//			} catch (Exception e) {
//				log.error("nMusic() -> Error hit!", e);
//				o.add("error", "Failed to get data from RaveDJ!");
//				o.add("error_id", "ERROR_RAVEDJ_EXTRACTION_FAILED");
//			}
//		} else if (target.equalsIgnoreCase("hive_uk")) {
//			if (action.equalsIgnoreCase("get_metadata")) {
//				final String url = "https://hive365.co.uk/streaminfo/info.php?t=" + System.currentTimeMillis();
//				try {
//					final String r = HttpClient.getString().url(url).create().dataThenClose();
//					final UniJsonValue object = UniJsonValue.parse(r);
//					final UniJsonValue info = object.get("info");
//					o.add("dj", info.getString("title"));
//					o.add("playing", info.getString("artist_song").replaceAll(Pattern.quote("&amp;"), "&"));
//					o.add("repeat", 30);
//				} catch (Exception e) {
//					log.error(e);
//					return new Response(503);
//				}
//			} else {
//				o.add("url", "http://stream.hive365.co.uk:8088/live"); // Dynamic URL?
//			}
//		} else if (target.equalsIgnoreCase("deezer")) {
//			if (action.equalsIgnoreCase("register_session")) {
//				if (!request.hasInputStream()) {
//					return new Response(400);
//				}
//				try {
//					final Undeezerified udz = DeezerSessionManager.auto(new String(IOUtils.toByteArray(request.getInputStream())));
//					if (udz != null) {
//						return new Response(200, createStream("OK"));
//					} else {
//						return new Response(503, createStream("FAIL"));
//					}
//				} catch (Exception e) {
//					log.error(e);
//					return new Response(503);
//				}
//			} else if (action.equalsIgnoreCase("track_get")) {
//				if (!args.containsKey("track") || args.get("track").isEmpty())
//					return new Response(400);
//				if (!request.hasInputStream())
//					return new Response(400);
//				final String _track = args.get("track");
//				String arl;
//				String quality = null;
//				try {
//					Long.parseLong(_track);
//					arl = new String(IOUtils.toByteArray(request.getInputStream()));
//					if (args.containsKey("q")) {
//						quality = args.get("q");
//					}
//				} catch (Exception e) {
//					return new Response(400);
//				}
//				try {
//					final Undeezerified ss = DeezerSessionManager.auto(arl);
//					if (ss == null) {
//						o.add("error", "SESSION_MANAGER_NULL_POINT");
//						return new Response(503, createStream(o.toString())).setCustomMime("application/json");
//					}
//					final Song s = ss.getSong(_track, AudioQuality.get(quality)); // TODO: Add quality controls
//					if (s == null) {
//						o.add("error", "SONG_RETURNED_NULL");
//						return new Response(503, createStream(o.toString())).setCustomMime("application/json");
//					}
//					final String id = DeezerSessionManager.registerTrack(s);
//					o.add("tid", id);
//					o.add("track", s.trackName);
//					o.add("artist", s.artist);
//					o.add("album", s.albumName);
//					o.add("songId", s.songID);
//					o.add("url", "/nmusic/get?target=deezer&action=track_stream&tid=" + id);
//					if (s.hasLyrics()) {
//						final UniJsonValue _l = UniJsonValue.array();
//						for (final Lyric l : s.lyrics.list) {
//							final UniJsonValue of = UniJsonValue.object();
//							of.add("text", l.text);
//							of.add("stamp", l.millis);
//							_l.add(of);
//						}
//						o.add("lyrics", _l);
//					}
//					final UniJsonValue a = UniJsonValue.object();
//					for (final Song.ImageSize iz : Song.ImageSize.values()) {
//						a.add(iz.id, s.getImageURL(iz));
//					}
//					o.add("pics", a);
//					return new Response(200, o).setCustomMime("application/json");
//				} catch (Exception e) {
//					log.error(e);
//					return new Response(503);
//				}
//			} else if (action.equalsIgnoreCase("track_stream")) {
//				if (!args.containsKey("tid") || args.get("tid").isEmpty())
//					return new Response(400);
//				final String tid = args.get("tid");
//				final Song s = DeezerSessionManager.trackGet(tid);
//				if (s == null)
//					return new Response(400);
//				return new Response(200, s.stream).header("Content-Length", s.length <= 0 ? null : String.valueOf(s.length));
//			} else {
//				o.add("error", "No target provied!");
//				o.add("error_id", "ERROR_TARGET_MISSING");
//				return new Response(200, o).setCustomMime("application/json");
//			}
//		} else if (target.equalsIgnoreCase("radio_jetset")) {
//			if (action.equalsIgnoreCase("get_random")) {
//				try {
//					final String playlist = ArrayUtils.random(RadioJSR.playlists);
//					o.add("playlist", playlist);
//					final UniJsonValue tracks = UniJsonValue.array();
//					final List<String> _tracks = RadioJSR.getTracks(playlist);
//					Collections.shuffle(_tracks);
//					for (final String track : _tracks) {
//						final UniJsonValue t = UniJsonValue.object();
//						t.add("url", RadioJSR.getTrackURL(playlist, track));
//						t.add("name", track);
//						tracks.add(t);
//					}
//					o.add("tracks", tracks);
//					return new Response(200, o).setCustomMime("application/json");
//				} catch (Exception e) {
//					log.error(e);
//					return new Response(503);
//				}
//			} else if (action.equalsIgnoreCase("get")) {
//				if (!args.containsKey("playlist") || args.get("playlist").isEmpty())
//					return new Response(400);
//				try {
//					final String playlist = args.get("playlist");
//					final List<String> _tracks = RadioJSR.getTracks(playlist);
//					if (_tracks == null || _tracks.isEmpty()) {
//						return new Response(404);
//					}
//					o.add("playlist", playlist);
//					final UniJsonValue tracks = UniJsonValue.array();
//					Collections.shuffle(_tracks);
//					for (final String track : _tracks) {
//						final UniJsonValue t = UniJsonValue.object();
//						t.add("url", RadioJSR.getTrackURL(playlist, track));
//						t.add("name", track);
//						tracks.add(t);
//					}
//					o.add("tracks", tracks);
//					return new Response(200, o).setCustomMime("application/json");
//				} catch (Exception e) {
//					log.error(e);
//					return new Response(503);
//				}
//			}
//		}
//		return new Response(200, o).setCustomMime("application/json");
	}

}
